/*
 * Numero.cpp
 *
 *  Created on: 01/10/2009
 *      Author: ale
 */

#include "Numero.h"
#include "Linea.h"
#include <vector>
#include <iostream>
#include "Definiciones.h"

Numero::Numero(int num) {
	std::vector<Punto> puntos;
	this->n = num;
	switch (num) {
	case 1: {
		puntos.push_back(Punto(55, 0));
		puntos.push_back(Punto(55, 65));
		puntos.push_back(Punto(45, 65));
		puntos.push_back(Punto(25, 45));
		puntos.push_back(Punto(35, 45));
		puntos.push_back(Punto(40, 50));
		puntos.push_back(Punto(40, 0));
		puntos.push_back(Punto(55, 0));
		capas.push_back(Poligono(puntos));
	}
		break;
	case 2:
	case 5: {
		puntos.push_back(Punto(60, 0));
		puntos.push_back(Punto(60, 10));
		puntos.push_back(Punto(30, 10));
		puntos.push_back(Punto(30, 25));
		puntos.push_back(Punto(60, 25));
		puntos.push_back(Punto(60, 65));
		puntos.push_back(Punto(20, 65));
		puntos.push_back(Punto(20, 55));
		puntos.push_back(Punto(50, 55));
		puntos.push_back(Punto(50, 35));
		puntos.push_back(Punto(20, 35));
		puntos.push_back(Punto(20, 0));
		puntos.push_back(Punto(60, 0));
		capas.push_back(Poligono(puntos));
		if (num == 5) {
			Matriz3D E, T;
			E.setEspejo();
			T.setTraslacion(Punto(0, H_NUMERO));
			capas[0].transformar(E);
			capas[0].transformar(T);
		}
	}
		break;
	case 3: {
		puntos.push_back(Punto(60, 0));
		puntos.push_back(Punto(60, 65));
		puntos.push_back(Punto(20, 65));
		puntos.push_back(Punto(20, 55));
		puntos.push_back(Punto(50, 55));
		puntos.push_back(Punto(50, 35));
		puntos.push_back(Punto(20, 35));
		puntos.push_back(Punto(20, 25));
		puntos.push_back(Punto(50, 25));
		puntos.push_back(Punto(50, 10));
		puntos.push_back(Punto(20, 10));
		puntos.push_back(Punto(20, 0));
		puntos.push_back(Punto(60, 0));
		capas.push_back(Poligono(puntos));
	}
		break;
	case 4: {
		puntos.push_back(Punto(60, 0));
		puntos.push_back(Punto(60, 65));
		puntos.push_back(Punto(50, 65));
		puntos.push_back(Punto(50, 40));
		puntos.push_back(Punto(30, 40));
		puntos.push_back(Punto(30, 65));
		puntos.push_back(Punto(20, 65));
		puntos.push_back(Punto(20, 30));
		puntos.push_back(Punto(50, 30));
		puntos.push_back(Punto(50, 0));
		puntos.push_back(Punto(60, 0));
		capas.push_back(Poligono(puntos));
	}
		break;
	case 6:
	case 9: {
		puntos.push_back(Punto(60, 0));
		puntos.push_back(Punto(60, 65));
		puntos.push_back(Punto(20, 65));
		puntos.push_back(Punto(20, 30));
		puntos.push_back(Punto(50, 30));
		puntos.push_back(Punto(50, 0));
		puntos.push_back(Punto(60, 0));
		capas.push_back(Poligono(puntos));
		std::vector<Punto> puntos2;
		puntos2.push_back(Punto(50, 40));
		puntos2.push_back(Punto(50, 55));
		puntos2.push_back(Punto(30, 55));
		puntos2.push_back(Punto(30, 40));
		puntos2.push_back(Punto(50, 40));
		capas.push_back(Poligono(puntos2));
		if (num == 6) {
			Matriz3D R, T;
			R.setRotacion(PI);
			T.setTraslacion(Punto(W_NUMERO, H_NUMERO));
		for (int i = 0; i < 2; ++i) {
			capas[i].transformar(R);
			capas[i].transformar(T);
		}
		}
	}
		break;
	case 7: {
		puntos.push_back(Punto(50, 0));
		puntos.push_back(Punto(50, 30));
		puntos.push_back(Punto(55, 30));
		puntos.push_back(Punto(55, 40));
		puntos.push_back(Punto(50, 40));
		puntos.push_back(Punto(50, 65));
		puntos.push_back(Punto(20, 65));
		puntos.push_back(Punto(20, 55));
		puntos.push_back(Punto(40, 55));
		puntos.push_back(Punto(40, 40));
		puntos.push_back(Punto(35, 40));
		puntos.push_back(Punto(35, 30));
		puntos.push_back(Punto(40, 30));
		puntos.push_back(Punto(40, 0));
		puntos.push_back(Punto(50, 0));
		capas.push_back(Poligono(puntos));
	}
		break;
	case 0:
	case 8: {
		puntos.push_back(Punto(60, 0));
		puntos.push_back(Punto(60, 65));
		puntos.push_back(Punto(20, 65));
		puntos.push_back(Punto(20, 0));
		puntos.push_back(Punto(60, 0));
		capas.push_back(Poligono(puntos));
		puntos.clear();
		if(num == 0){
			puntos.push_back(Punto(50, 10));
			puntos.push_back(Punto(50, 55));
			puntos.push_back(Punto(30, 55));
			puntos.push_back(Punto(30, 10));
			puntos.push_back(Punto(50, 10));
			capas.push_back(Poligono(puntos));
		}else {
		puntos.push_back(Punto(30, 40));
		puntos.push_back(Punto(50, 40));
		puntos.push_back(Punto(50, 55));
		puntos.push_back(Punto(30, 55));
		puntos.push_back(Punto(30, 40));
		capas.push_back(Poligono(puntos));
		puntos.clear();
		puntos.push_back(Punto(30, 30));
		puntos.push_back(Punto(50, 30));
		puntos.push_back(Punto(50, 10));
		puntos.push_back(Punto(30, 10));
		puntos.push_back(Punto(30, 30));
		capas.push_back(Poligono(puntos));
		}
	}
	}
}

Numero::~Numero() {
}

void Numero::dibujarContorno(Matriz3D& mat) {
	for (unsigned c = 0; c < capas.size(); c++) {
		capas[c].setColorLinea(colorLinea);
		capas[c].dibujarContorno(mat);
	}
}
void Numero::pintar(Matriz3D& mat) {
	capas[0].setColorPintura(colorPintura);
	capas[0].pintar(mat);
	for (unsigned c = 1; c < capas.size(); c++) {
		capas[c].setColorPintura(fondo);
		capas[c].pintar(mat);
	}
}

void Numero::setColorFondo(const Color& col) {
	this->fondo = col;
}

